<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>对象</title>
    <script>
      /* 
         对象是一组无序的相关属性和方法的集合
         - 属性：事物的特征，在对象中用属性来表示（常用名词）
         - 方法：事物的行为，在对象中用方法来表示（常用动词）
       */
      //创建对象的方式
      //方式三: 构造函数
      /* 
        构造函数
        特点:
        1.函数名称大写开头
        2.函数没有返回值,即没有return
        3.函数内部对属性和方法进行赋值
      */
      /* function Student(name, age, sex) {
        //this表示当前对象
        this.name = name
        this.age = age
        this.sex = sex
        this.study = function () {
          console.log('学生学习...')
        }
      } */
      function Student(name, age, sex, study) {
        //this表示当前对象
        this.name = name
        this.age = age
        this.sex = sex
        this.study = study
      }

      //利用构造函数创建对象
      /* const student = new Student('张三', 23, '男')
      const student2 = new Student('李四', 27, '女')
      const student3 = new Student('王五', 25, '男') */

      const student = new Student('张三', 23, '男', function () {
        console.log('张三学习')
      })
      const student2 = new Student('李四', 27, '女', function () {
        console.log('李四学习')
      })
      const student3 = new Student('王五', 25, '男', function () {
        console.log('王五学习')
      })

      //访问对象
      console.log(student)
      //访问对象属性
      //注意: 常规时使用第一种方式访问更方便,但是第二种方式当属性是动态变量时也会用到
      console.log(student.name, student.age, student.sex)
      console.log(student['name'], student['age'], student['sex'])

      //访问函数
      student.study()
      student2.study()
      student3.study()

      //修改学生对象的属性
      student.name = '李四'
      student.age = 25
      console.log(student)
    </script>
  </head>
  <body></body>
</html>
